package com.nehc.nettyserver.service;

import java.util.Map;
import java.util.Set;

/**
 * 缓存服务接口
 * 
 * @author NEHC
 */
public interface CacheService {
    
    /**
     * 缓存类型
     */
    enum CacheType {
        /**
         * 连接缓存
         */
        CONNECTION,
        
        /**
         * 消息缓存
         */
        MESSAGE,
        
        /**
         * 用户缓存
         */
        USER,
        
        /**
         * 统计缓存
         */
        STATS,
        
        /**
         * 配置缓存
         */
        CONFIG
    }
    
    /**
     * 获取缓存值
     * 
     * @param cacheType 缓存类型
     * @param key 键
     * @param <T> 值类型
     * @return 缓存值
     */
    <T> T get(CacheType cacheType, String key);
    
    /**
     * 设置缓存
     * 
     * @param cacheType 缓存类型
     * @param key 键
     * @param value 值
     * @param <T> 值类型
     */
    <T> void put(CacheType cacheType, String key, T value);
    
    /**
     * 设置缓存，带过期时间
     * 
     * @param cacheType 缓存类型
     * @param key 键
     * @param value 值
     * @param expireSeconds 过期时间（秒）
     * @param <T> 值类型
     */
    <T> void put(CacheType cacheType, String key, T value, long expireSeconds);
    
    /**
     * 移除缓存
     * 
     * @param cacheType 缓存类型
     * @param key 键
     */
    void remove(CacheType cacheType, String key);
    
    /**
     * 判断是否存在
     * 
     * @param cacheType 缓存类型
     * @param key 键
     * @return 是否存在
     */
    boolean exists(CacheType cacheType, String key);
    
    /**
     * 获取缓存键集合
     * 
     * @param cacheType 缓存类型
     * @return 键集合
     */
    Set<String> keys(CacheType cacheType);
    
    /**
     * 获取指定前缀的键集合
     * 
     * @param cacheType 缓存类型
     * @param prefix 前缀
     * @return 键集合
     */
    Set<String> keys(CacheType cacheType, String prefix);
    
    /**
     * 清空指定类型的缓存
     * 
     * @param cacheType 缓存类型
     */
    void clear(CacheType cacheType);
    
    /**
     * 获取缓存统计信息
     * 
     * @return 统计信息
     */
    Map<String, Object> getStats();
} 